package vip.xiaonuo.smzq.modular.lifecycle.service.module;


import cn.hutool.core.lang.tree.TreeNode;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.checkerframework.checker.units.qual.C;
import org.springframework.web.multipart.MultipartFile;
import vip.xiaonuo.smzq.modular.lifecycle.base.KqfwCoordinates;
import vip.xiaonuo.smzq.modular.lifecycle.base.QueryLifeCycleBase;
import vip.xiaonuo.smzq.modular.lifecycle.constant.WebResultStatusConstant;
import vip.xiaonuo.smzq.modular.lifecycle.entity.KclCb08Xzqh;
import vip.xiaonuo.smzq.modular.lifecycle.entity.KclKs;
import vip.xiaonuo.smzq.modular.lifecycle.entity.LifeCycleMineStore;
import vip.xiaonuo.smzq.modular.lifecycle.po.QueryAdministractiveRegionPO;
import vip.xiaonuo.smzq.modular.lifecycle.po.QueryMineInfoPO;
import vip.xiaonuo.smzq.modular.lifecycle.po.QueryMineStorePO;
import vip.xiaonuo.smzq.modular.lifecycle.po.QueryYearStorePO;
import vip.xiaonuo.smzq.modular.lifecycle.po.datamanager.*;
import vip.xiaonuo.smzq.modular.lifecycle.vo.*;
import vip.xiaonuo.smzq.modular.lifecycle.vo.datamanager.CoorPolygonVO;
import vip.xiaonuo.smzq.modular.lifecycle.vo.datamanager.DBExistPedigeeMineralVO;
import vip.xiaonuo.smzq.modular.lifecycle.vo.datamanager.LifeCycleNodeVO;
import vip.xiaonuo.smzq.modular.lifecycle.vo.datamanager.LifeCyclePedigeeNodeVO;

import java.time.LocalDate;
import java.util.List;

/**
 * <ul>
 * <li>name:  LifeCycleService</li>
 * <li>author name: GEOSCENE_YUYANFEI</li>
 * <li>create time: 2024-03-20 15:39:43</li>
 * </ul>
 */
public interface LifeCycleDataManagerService {
    /**
     *
     * @param queryMineListPO
     * @return
     */
    IPage<QueryMineInfoVO> queryKclKsListPage(QueryMineListPO queryMineListPO);

    /**
     * 得到审批储量最新年度
     * @param queryLifeCycleBase
     * @return 最新年度
     */
    Integer getApplyStoreNestYear(QueryLifeCycleBase queryLifeCycleBase);

    /**
     * 上传材料文件
     * @param files 文件列表
     * @param id 生命周期节点id
     * @return
     */
    boolean uploadMeterFile(List<MultipartFile> files,String id);

    /**
     * 下载文件列表，如果是多个文件则用逗号分隔
     * @param fileId
     */
    void downloadFiles(List<String> fileIds);

    /**
     * 查询数据库中已经存在的矿区列表
     * @param curMinCode 当前矿区编号
     * @return
     */
    List<DBExistPedigeeMineralVO> queryDBExistPedigeeMineralList(String curMinCode);
    /**
     * 查询一个矿区的所有族谱节点
     * @param mineralCode 矿区编号
     * @param regClassCode 登记分类编号
     * @return
     */
    List<LifeCyclePedigeeNodeVO> queryPedigeeLifeCycleNodes(String mineralCode,List<Integer> regClassCodes);

    /**
     * 保存生命周期节点PO类
     * @param saveLCNodePO
     * @return
     */
    boolean saveOrUpdateLCNode(SaveLCNodePO saveLCNodePO);

    /**
     * 生命周期节点删除
     * @param id 节点id
     * @param xlIndex 新立索引
     * @return
     */
    boolean lifeCycleNodeDel(String id,Integer xlIndex);

    /**
     * 保存或者更新坐标
     * @param saveOrUpdateCoorPO po类
     * @return
     */
    boolean saveOrUpdateCoor(SaveOrUpdateCoorPO saveOrUpdateCoorPO);

    /**
     * 更新年报坐标
     * @param lifeCycleMineStore 更新年报的生命周期节点对象
     * @return true/false
     */
    boolean updateYearReportCoor(LifeCycleMineStore lifeCycleMineStore);


    /**
     * 根据生命周期节点id查询坐标列表
     * @param id 生命周期节点id
     * @return
     */
    CoorPolygonVO queryCoorByLcNodeId(String id);

    /**
     * 创建矿区范围
     * @param dmlCoor
     * @param exportType
     * @param id
     * @return
     */
    CreateAreaImgPO createMineField(String dmlCoor,String exportType,String id);

    /**
     * 检查节点日期是否存在
     * @param checkNodeDatePO 检查的节点日期po类
     * @return
     */
    boolean checkNodeDateExist(CheckNodeDatePO checkNodeDatePO);

    /**
     * 查询坐标根据，登记分类代码，年度，矿区编号
     * @param queryLifeCycleBase 三个参数基础类
     * @return
     */
    CoorPolygonVO queryCoorByBaseParams(QueryLifeCycleBase queryLifeCycleBase);

    /**
     * 第一个节点变成无矿权
     * @param saveLCNodePO 保存节点的参数类
     * @return
     */
    WebResultStatusConstant firstNodeToWKQ(SaveLCNodePO saveLCNodePO);

    /**
     * 检查坐标的合法性
     * @param coorStr 坐标字符串
     * @return
     */
    String checkCoorTrue(String coorStr);

    /**
     * 得到坐标对象列表
     * @param coorStr
     * @return
     */
    List<KqfwCoordinates> getCoorItemByCoorStr(String coorStr);

    /**
     * 得到族谱id
     * @param mineralCode 矿区编号
     * @param regClassCode 登记分类编号
     * @param localDate 日期
     * @return
     */
    String getPedId(String mineralCode,Integer regClassCode, LocalDate localDate,Integer xlInd);

    /**
     * 得到矿山列表wrapper
     * @param wrapperP 外部传入的wrapper
     * @param queryMineListPO 查询参数类
     * @return
     */
    MPJLambdaWrapper<KclKs> getKclListWrapper(MPJLambdaWrapper<KclKs> wrapperP, QueryMineListPO queryMineListPO);

}

